/**
 * 三种操作：
 * +1 +2 *2
 * 将0变为N的最小步数
 * 因为操作只能影响二进制位，因此反过来考虑
 * 如果N末尾有x个0，显然要右移x-1位，对应x-1个乘法操作
 * 如果N末尾没有0或者只有1个0，减去即可，对应两个加法操作其中之一
 * 这样操作是最优的，将N变为0
 */
#include <bits/stdc++.h>
#include <bits/extc++.h>
using namespace std;

using llt = long long;
using vi = vector<int>;
using vll = vector<llt>;

int N;

void work(){
    int ans = 0;
    cin >> N;
    while(N){
        auto t = __builtin_ctz(N);
        if(t > 1){
            ans += t - 1;
            N >>= t - 1; 
        }else if(t == 1){
            ans += 1;
            N ^= 2;
        }else{
            ans += 1;
            N ^= 1;
        }
                
    }
    cout << ans << endl;
    return;
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int nofkase = 1;
    // cin >> nofkase;
    while(nofkase--) work();
    return 0;
}